#include <windows.h>
#include <tchar.h>
#include <stdio.h>

// 声明DLL函数
typedef BOOL (*IsRunAsAdminFunc)();
typedef BOOL (*RunAsAdminFunc)(LPCWSTR, int, LPCWSTR, LPCWSTR);

int main()
{
    HMODULE hDll = LoadLibrary(_T("ElevatePrivileges.dll"));
    if (!hDll)
    {
        _tprintf(_T("无法加载DLL\n"));
        return 1;
    }

    IsRunAsAdminFunc IsRunAsAdmin = (IsRunAsAdminFunc)GetProcAddress(hDll, "IsRunAsAdmin");
    RunAsAdminFunc RunAsAdmin = (RunAsAdminFunc)GetProcAddress(hDll, "RunAsAdmin");

    if (!IsRunAsAdmin || !RunAsAdmin)
    {
        _tprintf(_T("无法获取函数地址\n"));
        FreeLibrary(hDll);
        return 1;
    }

    // 检查权限
    if (!IsRunAsAdmin())
    {
        _tprintf(_T("当前不是管理员权限，尝试提升...\n"));
        
        WCHAR szPath[MAX_PATH];
        if (GetModuleFileNameW(NULL, szPath, ARRAYSIZE(szPath)))
        {
            if (RunAsAdmin(szPath, SW_SHOWNORMAL, NULL, NULL))
            {
                _tprintf(_T("已请求管理员权限，退出当前实例\n"));
                FreeLibrary(hDll);
                return 0; // 退出当前非管理员实例
            }
        }
        
        _tprintf(_T("提升权限失败\n"));
        FreeLibrary(hDll);
        return 1;
    }

    _tprintf(_T("当前已是管理员权限\n"));
    
    // 在这里放置需要管理员权限的代码
    
    FreeLibrary(hDll);
    return 0;
}